234. 回文链表

给你一个单链表的头节点 head ，请你判断该链表是否为回文链表。如果是，返回 true ；否则，返回 false 。

 struct ListNode *findmid(struct ListNode*head)
{
    if(head==NULL)
    {
        return NULL;
    }
    struct ListNode*fast=head,*slow=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
    }
    return slow;
}

struct ListNode*revarse(struct ListNode*head)
{
    if(head==NULL)
    {
        return NULL;
    }
    struct ListNode*n1,*n2,*n3;
    n1=NULL;
    n2=head;
    n3=n2->next;
    while(n2)
    {
        n2->next=n1;
        n1=n2;
        n2=n3;
        if(n3)
            n3=n3->next;
    }
    return n1;
}

bool isPalindrome(struct ListNode* head)
{
    struct ListNode*cur=head;
    struct ListNode*mid=findmid(head);
    struct ListNode*rcur=revarse(mid);
    while(rcur)
    {
        if(cur->val!=rcur->val)
        {
            return false;
        }
        cur=cur->next;
        rcur=rcur->next;
    }
    return true;
}